Skip to main content

Creating report document

Create reports on all the comments added to the document and on every change which was made to the document in the review mode:

  • open the created file (Api/GetDocument);
  • get the comments and review reports and save them to the global variable (ApiDocument/GetCommentsReport, ApiDocument/GetReviewReport);
  • create a table for the comments/review report and fill it in with the data from the global variable (Api/CreateParagraph, Api/CreateTable, ApiDocument/Push, ApiDocumentContent/GetElement, ApiParagraph/AddText, ApiTable/GetRow, ApiTable/MergeCells, ApiTableCell/GetContent, ApiTableRow/GetCell);
  • edit text style in the table (ApiDocument/GetStyle, ApiRun/SetColor, ApiRun/SetStrikeout).
let oDocument = Api.GetDocument()
GlobalVariable["CommentsReport"] = oDocument.GetCommentsReport()
GlobalVariable["ReviewReport"] = oDocument.GetReviewReport()

builder.CloseFile()

builder.CreateFile("docx")

const oCommentsReport = GlobalVariable["CommentsReport"]
const oReviewReport = GlobalVariable["ReviewReport"]

oDocument = Api.GetDocument()
let oParagraph = Api.CreateParagraph()
oDocument.Push(oParagraph)
oParagraph.AddText("Comments report")

let nRows = 1
for (const sUserName in oCommentsReport) {
nRows += oCommentsReport[sUserName].length
}

let nCols = 6
let oTable = Api.CreateTable(nCols, nRows)
oDocument.Push(oTable)

function privateFillCell(nCurRow, nCurCol, sText) {
const oRow = oTable.GetRow(nCurRow)
const oCell = oRow.GetCell(nCurCol)
const oCellContent = oCell.GetContent()
const oRun = oCellContent.GetElement(0).AddText(sText)
return {Cell: oCell, Run: oRun}
}

privateFillCell(0, 0, "Name")
privateFillCell(0, 1, "Date")
privateFillCell(0, 2, "")
privateFillCell(0, 3, "Solved")
privateFillCell(0, 4, "Text")
privateFillCell(0, 5, "Quote text")

let nCurRow = 1
for (sUserName in oCommentsReport) {
const arrUserComments = oCommentsReport[sUserName]
const arrCells = []
for (let nIndex = 0, nCount = arrUserComments.length; nIndex < nCount;
nIndex += 1, nCurRow += 1) {
const oCommentInfo = oCommentsReport[sUserName][nIndex]
arrCells.push(privateFillCell(nCurRow, 0, "").Cell)
privateFillCell(nCurRow, 1, new Date(oCommentInfo["Date"]).toString())
let value2
if (oCommentInfo["IsAnswer"] === true) {
value2 = "answer"
} else {
value2 = "comment"
}
privateFillCell(nCurRow, 2, value2)

if (oCommentInfo["IsAnswer"] !== true) {
let value3
if (oCommentInfo["IsSolved"] === true) {
value3 = "yes"
privateFillCell(nCurRow, 3, value3).Run.SetColor(0, 255, 0)
} else {
value3 = "no"
privateFillCell(nCurRow, 3, value3).Run.SetColor(255, 0, 0)
}
}

let value4
if (oCommentInfo["CommentMessage"]) {
value4 = oCommentInfo["CommentMessage"]
} else {
value4 = ""
}
privateFillCell(nCurRow, 4, value4)

let value5
if (oCommentInfo["QuoteText"]) {
value5 = oCommentInfo["QuoteText"]
} else {
value5 = ""
}
privateFillCell(nCurRow, 5, value5)
}

const oMergedCell = oTable.MergeCells(arrCells)
if (oMergedCell) {
const oCellContent = oMergedCell.GetContent()
oCellContent.GetElement(0).AddText(sUserName)
} else if (arrCells.length !== 0) {
oCellContent = arrCells[0].GetContent()
oCellContent.GetElement(0).AddText(sUserName)
}
}
oTable.SetStyle(oDocument.GetStyle("Bordered"))

oParagraph = Api.CreateParagraph()
oDocument.Push(oParagraph)
oParagraph.AddText("Review report")

nRows = 1
for (sUserName in oReviewReport) {
nRows += oReviewReport[sUserName].length
}

nCols = 4
oTable = Api.CreateTable(nCols, nRows)
oDocument.Push(oTable)

privateFillCell(0, 0, "Name")
privateFillCell(0, 1, "Date")
privateFillCell(0, 2, "Action")
privateFillCell(0, 3, "")

nCurRow = 1
for (sUserName in oReviewReport) {
const arrUserChanges = oReviewReport[sUserName]
arrCells = []
for (nIndex = 0, nCount = arrUserChanges.length; nIndex < nCount; nIndex += 1, nCurRow += 1) {
const oChangeInfo = arrUserChanges[nIndex]
arrCells.push(privateFillCell(nCurRow, 0, "").Cell)
privateFillCell(nCurRow, 1, new Date(oChangeInfo["Date"]).toString())
const sType = oChangeInfo["Type"]
if (sType === "TextAdd") {
privateFillCell(nCurRow, 2, "Added text")
privateFillCell(nCurRow, 3, oChangeInfo["Value"])
} else if (sType === "TextRem") {
privateFillCell(nCurRow, 2, "Removed text")
privateFillCell(nCurRow, 3, oChangeInfo["Value"]).Run.SetStrikeout(true)
} else if (sType === "TextPr") {
privateFillCell(nCurRow, 2, "Formatted text")
} else if (sType === "ParaAdd") {
privateFillCell(nCurRow, 2, "Added paragraph")
} else if (sType === "ParaRem") {
privateFillCell(nCurRow, 2, "Removed paragraph")
} else if (sType === "ParaPr") {
privateFillCell(nCurRow, 2, "Formatted paragraph")
} else {
privateFillCell(nCurRow, 2, "Unknown change")
}
}
oMergedCell = oTable.MergeCells(arrCells)
if (oMergedCell) {
oCellContent = oMergedCell.GetContent()
oCellContent.GetElement(0).AddText(sUserName)
} else if (arrCells.length !== 0) {
const oCellContent = arrCells[0].GetContent()
oCellContent.GetElement(0).AddText(sUserName)
}
}
oTable.SetStyle(oDocument.GetStyle("Bordered"))